/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entities;

import JDBC.ConnectionPool;
import JDBC.ConnectionPoolException;
import JDBC.Operazioni;
import Logger.MyLogger;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author marcy
 */
public class Vaccinazione {

    private Integer Id;
    private Integer Id_medico;
    private Integer Id_paziente;
    private Date Data;
    //Per ottenere i dati dal database
    ConnectionPool pool;
    Connection conn;

    public Date getData() {
        return Data;
    }

    public Integer getId() {
        return Id;
    }

    public Integer getId_medico() {
        return Id_medico;
    }

    public Integer getId_paziente() {
        return Id_paziente;
    }

    public ResultSet getLastByIdPaziente(int Id) {

        MyLogger.getLogger().debug("Lista ultime 10 vaccinazioni");
        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();
        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Vaccinazione.class.getName()).log(Level.SEVERE, null, ex);
        }
        ResultSet set = Operazioni.execute_query("SELECT V.Data, M.Nome, M.Cognome "
                + "FROM Vaccinazione V, Medici M "
                + "WHERE V.Id_paziente = " + Id + " "
                + "AND M.Id = V.Id_medico "
                + "ORDER BY V.data "
                + "LIMIT 0, 10", conn);

        pool.relaseConnection(conn);
        conn = null;
        pool = null;
        System.gc();

        return set;
    }

    public ResultSet getFromTo(String dataFrom, String dataTo) {
        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();

        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Vaccinazione.class.getName()).log(Level.SEVERE, null, ex);
        }

        int annoFrom = Integer.parseInt(dataFrom.substring(6, 10)) - 1900;
        int giornoFrom = Integer.parseInt(dataFrom.substring(3, 5));
        int meseFrom = Integer.parseInt(dataFrom.substring(0, 2)) - 1;
        Date tmp_from = new Date(annoFrom, meseFrom, giornoFrom);
        String from = tmp_from.toString();

        int annoTo = Integer.parseInt(dataTo.substring(6, 10)) - 1900;
        int giornoTo = Integer.parseInt(dataTo.substring(3, 5));
        int meseTo = Integer.parseInt(dataTo.substring(0, 2)) - 1;
        Date tmp_To = new Date(annoTo, meseTo, giornoTo);
        String to = tmp_To.toString();




        ResultSet set = Operazioni.execute_query(
                "SELECT DISTINCT "
                + " P.Nome, P.Cognome, M.Nome, M.Cognome, V.Data, V.Id, P.Id"
                + " FROM Paziente P, Medici M, Vaccinazione V, Vaccinazione V1"
                + " WHERE V.Data < '" + to + "' "
                + " AND V.Data  > '" + from + "' "
                + " AND V.Id <> V1.Id "
                + " AND V.Id_medico = M.Id "
                + " AND V.Id_paziente = P.Id "
                + " ORDER BY V.Data "
                + " ", conn);
        pool.relaseConnection(conn);
        conn = null;


        return set;

    }

    public void insertNewVaccinazione(int id_paziente, int id_medico) {

        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();
        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Vaccinazione.class.getName()).log(Level.SEVERE, null, ex);
        }
        Operazioni.execute_statement("INSERT INTO Progetto.Vaccinazione (Id, Id_medico, Id_paziente, Data) "
                + "VALUES (NULL, '" + id_medico + "', '" + id_paziente + "', CURRENT_TIMESTAMP);", conn);


    }

    public ResultSet getVaccinazioniPerPaziente(int id_paziente) {
        try {
            pool = ConnectionPool.getConnetionPool();
            conn = pool.getConnection();

        } catch (ConnectionPoolException ex) {
            Logger.getLogger(Vaccinazione.class.getName()).log(Level.SEVERE, null, ex);
        }

        ResultSet set = Operazioni.execute_query("SELECT V.Id, V.Data, M.Nome, M.Cognome "
                + "FROM Vaccinazione V, Medici M "
                + "WHERE V.Id_paziente = '" + id_paziente + "' "
                + "AND V.Id_medico = M.Id "
                + "ORDER BY V.Data DESC ", conn);
        pool.relaseConnection(conn);
        conn = null;
        return set;
    }
}
